#ifndef __LW_TIMER_H
#define __LW_TIMER_H

#ifdef __cplusplus
extern "C" {
#endif

#include "stdint.h"

/********************宏定义********************/
#define LW_TIMER_INFINITE	-1

/********************类型定义********************/

/*软件定时器时间基准对象*/
typedef struct
{
	uint32_t (*time_stamp_get)(void);
	
}lw_timer_hook_t;

typedef struct lw_timer_struct lw_timer_t;

/*软件定时器对象结构体*/
struct lw_timer_struct
{
    lw_timer_t *next;  /*指向下一个定时器的指针*/
    void (*callback)(lw_timer_t *);  /*定时器回调函数*/
    void *user_data;  /*用户数据指针*/
    int32_t exec_count;  /*定时器执行次数，-1 表示永远执行*/
    uint32_t start_time;  /*定时器启动时间*/
    uint32_t timeout;  /*定时器超时时间*/
    uint8_t is_running;  /*定时器是否正在运行*/	
};

/********************全局函数声明********************/

void lw_timer_set_stamp(uint32_t (*time_stamp_get_func)(void));
void* get_timer_user_data(lw_timer_t *timer);
void lw_timer_start(lw_timer_t *timer, void (*callback)(lw_timer_t *), void *user_data, uint32_t timeout, int32_t exec_count);
void lw_timer_stop(lw_timer_t *timer);
void lw_timer_scheduler(void);

#ifdef __cplusplus
}
#endif

#endif
